Completed
Push — master ( c8cc0a...f17656 )
by Thomas
44s
created

Plugins.applyPlugins   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
c 1
b 0
f 0
nc 3
dl 0
loc 18
rs 9.4285
nop 2
1
'use strict'
2
3
const fs = require('fs')
4
const path = require('path')
5
const util = require('../util')
6
const chalk = require('chalk')
7
const output = require('../output')
8
9
var Plugins = {}
10
11
function getDirectories (srcpath) {
12
  try {
13
    return fs.readdirSync(srcpath).filter(function (file) {
14
      return fs.existsSync(path.join(srcpath, file, 'package.json'))
15
    })
16
  } catch (e) {
17
    // Do nothing
18
  }
19
20
  return []
21
}
22
23
Plugins.applyPlugins = function (program, pluginsDirectory) {
24
  // Get plugins directory
25
  pluginsDirectory = util.getPluginsDirectory(pluginsDirectory)
26
27
  // Patch 'program'
28
  program.util = util
29
  program.output = output
30
31
  // Read directories
32
  var plugins = getDirectories(pluginsDirectory)
33
  for (var x in plugins) {
34
    if (!plugins.hasOwnProperty(x)) {
35
      continue
36
    }
37
38
    require(path.join(pluginsDirectory, plugins[x]))(program)
39
  }
40
}
41
42
Plugins.listPlugins = function () {
43
  var pluginsDirectory = util.getPluginsDirectory()
44
  var plugins = getDirectories(pluginsDirectory)
45
  for (var x in plugins) {
46
    if (!plugins.hasOwnProperty(x)) {
47
      continue
48
    }
49
50
    var info = require(path.join(pluginsDirectory, plugins[x], 'package.json'))
51
    var title = chalk.underline(info.name) + ' (' + info.version + ')'
52
    if ('description' in info && info.description && info.description.length) {
53
      title += '\n  ' + info.description
54
    }
55
56
    output.log(title)
57
  }
58
}
59
60
module.exports = Plugins
61